package notify

import (
	"encoding/json"
	"jlpay-sdk-go/pkg/jlpay/core"
	"jlpay-sdk-go/pkg/jlpay/models/openmerch/notify"
	"jlpay-sdk-go/pkg/jlpay/services"
	"jlpay-sdk-go/pkg/jlpay/utils"
)

// NotifyService 通知服务
type NotifyService struct {
	*services.BaseService
}

// NewNotifyService 创建通知服务实例
func NewNotifyService(config *core.Config) *NotifyService {
	return &NotifyService{
		BaseService: services.NewBaseService(config),
	}
}

// ParseNotify 解析审核结果通知
func (s *NotifyService) ParseNotify(notifyParam interface{}) (*notify.ApplyResultRecord, error) {
	utils.Info("开始解析审核结果通知")

	// 处理输入参数，支持map和NotifyParam对象
	var notifyData map[string]interface{}

	switch param := notifyParam.(type) {
	case map[string]interface{}:
		notifyData = param
	case *notify.NotifyParam:
		notifyData = param.ToMap()
	default:
		utils.Error("不支持的notifyParam类型")
		return nil, nil
	}

	// 从body字段中解析业务数据
	bodyStr, ok := notifyData["body"].(string)
	if !ok {
		utils.Error("body字段不是字符串类型")
		return nil, nil
	}

	utils.Infof("解析body内容: %s", bodyStr)

	// 直接解析body为ApplyResultRecord结构体
	var record notify.ApplyResultRecord
	if err := json.Unmarshal([]byte(bodyStr), &record); err != nil {
		utils.Errorf("body字段不是有效的JSON格式: %v", err)
		return nil, nil
	}

	// 这里应该进行签名验证
	// TODO: 实现签名验证逻辑

	utils.Info("审核结果通知解析成功")

	return &record, nil
}
